-- OpenWrt MVC 框架配置中心
-- 文件路径: /usr/lib/lua/tianku/config.lua
-- 最后更新: 2023-10-20

local _M = {}
local util = require("tianku.helpers.util")

-- 默认配置（基础安全配置）
local defaults = {
    app = {
        env = "production",  -- 运行环境 production/development
        timezone = "UTC+8",
        secret_key = "default-secret-change-in-production",
        debug = false
    },
    http = {
        timeout = 30,        -- 请求超时时间(秒)
        max_upload = "5MB"   -- 最大上传尺寸
    }
}

-- 加载各模块配置
local function load_configs()
    return {
        -- 路由配置（必须存在）
        routes = require("tianku.config.route"),
        
        -- 数据库配置（可选）
        database = pcall(require, "tianku.config.database") and require("tianku.config.database") or {},
        
        -- 自定义应用配置（可选）
        app = util.table_merge(
            defaults.app,
            pcall(require, "tianku.config.app") and require("tianku.config.app") or {}
        )
    }
end

-- 配置验证
local function validate_config(config)
    -- 检查必要路由配置
    if not config.routes or #config.routes == 0 then
        ngx.log(ngx.ERR, "No routes configured!")
        os.exit(1)
    end
    
    -- 生产环境安全检查
    if config.app.env == "production" then
        if config.app.secret_key == defaults.app.secret_key then
            ngx.log(ngx.ERR, "SECURITY WARNING: Using default secret key in production!")
            os.exit(1)
        end
    end
end

-- 主配置加载器
function _M.load()
    local config = load_configs()
    
    -- 环境变量覆盖
    config.app.env = os.getenv("APP_ENV") or config.app.env
    config.app.debug = os.getenv("APP_DEBUG") == "1" or config.app.debug
    
    validate_config(config)
    
    -- 动态计算配置项
    config.http.max_upload_bytes = util.parse_size(config.http.max_upload)
    
    return config
end

return _M